package com.tbit.uqbike.webmanager.dao.core;

import com.tbit.uqbike.object.pojo.AccountConfigExt;
import com.tbit.uqbike.object.pojo.MachineAlarm;
import com.tbit.uqbike.object.pojo.MoveConfig;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 区域参数扩展配置Mapper接口
 *
 * @author jing
 * @date 2021-04-21
 */
public interface AccountConfigExtDao {

    /**
     * 查询区域参数扩展配置列表
     *
     * @return 区域参数扩展配置集合
     */
    public List<AccountConfigExt> selectAccountConfigExtList(Integer accountId,String paramKey);

    /**
     * 获取指定区域配置
     * @param map
     * @return
     */
    AccountConfigExt getByAccountIdAndType(Map<String, Object> map);

    /**
     * 获取指定区域列表配置
     * @return
     */
    List<AccountConfigExt> getByAccountIdsAndType(@Param("ids") List<Integer> ids, @Param("paramKey") String paramKey);
    /**
     * 批量新增区域参数扩展配置
     *
     * @param accountConfigExt
     * @param accountConfigExts 区域参数扩展配置
     * @return 结果
     */
    public int batchInsertAccountConfigExt(@Param("accountConfigExt") AccountConfigExt accountConfigExt, @Param("accountConfigExts") List<AccountConfigExt> accountConfigExts);

    /**
     * 给定默认值
     *
     * @param accountConfigExt
     * @param accountConfigExt 区域参数扩展配置
     * @return 结果
     */
    Integer addAccountConfigExt(AccountConfigExt accountConfigExt);

    /**
     * 修改区域参数扩展配置
     *
     * @param accountConfigExt 区域参数扩展配置
     * @return 结果
     */
    public int updateAccountConfigExt(AccountConfigExt accountConfigExt);

    /**
     * 删除区域参数扩展配置
     *
     * @param accountConfigExt 区域参数扩展配置
     * @return 结果
     */
    public int deleteAccountConfigExtById(AccountConfigExt accountConfigExt);

    /**
     * 查询区域所有开关
     *
     * @param accountId
     * @return
     */
    List<String> getByAccountId(Integer accountId);

    /**
     * 批量新增
     *
     * @param accountConfigExts
     */
    void addBatch(@Param("accountConfigExts") List<AccountConfigExt> accountConfigExts);


    /**
     * 添加运维端-资产预警设置
     *
     * @param machineAlarm 。
     */
    void insertMaintainMachineAlarmConfig(MachineAlarm machineAlarm);

    /**
     * 添加运维端-挪车设置
     *
     * @param moveConfig
     */
    void insertMaintainMachineMoveConfig(MoveConfig moveConfig);

    MoveConfig selectConfig(Integer accountId);

    /**
     * 修改挪车配置
     *
     * @param moveConfig
     */
    void updateMoveConfig(MoveConfig moveConfig);
    /**
     * 通过区域id获取
     *
     * @param accountId
     * @return
     */
    List<AccountConfigExt> getByAccountIdClass(Integer accountId);

    /**
     * 通过运营区域id和key进行查询
     *
     * @param accountId 运营区域id
     * @param paramKeys  参数key集合
     * @return entity
     */
    List<AccountConfigExt> selectByAccountIdAndKeys(@Param("accountId") Integer accountId, @Param("paramKeys") Set<String> paramKeys);

    /**
     * 通过运营区域id和key进行查询
     *
     * @param accountIdList 运营区域id
     * @param paramKeys  参数key集合
     * @return entity
     */
    List<AccountConfigExt> selectByAccountIdsAndKeys(@Param("accountIdList") List<Integer> accountIdList, @Param("paramKeys") Set<String> paramKeys);

    /**
     * 批量修改区域配置
     * @param accountIdList 区域id集合
     * @param paramKey 配置类型
     * @param paramValue 配置值
     */
    void batchUpdate(@Param("accountIdList") List<Integer> accountIdList, @Param("paramKey") String paramKey, @Param("paramValue") int paramValue);

    void delByAccountId(@Param("accountId") Integer accountId);

    /**
     * 批量更新
     * @param list
     */
    void batchUpdateByList(@Param("list") List<AccountConfigExt> list);

    /**
     * 删除区域的指定key
     * @param accountId
     * @param keys
     */
    void deleteByAccountIdAndKey(@Param("accountId") Integer accountId,@Param("keys") List<String> keys);
}
